<?php declare(strict_types=1);
/**
 * Created by PhpStorm.
 * User: Admin
 * Date: 2020/5/6
 * Time: 13:26
 */

namespace App\Rpc\Lib;

/**
 * Interface Permission
 *
 * @since 2.0
 *
 * @package App\Rpc\Lib
 */
interface Permission
{
    /**
     * 获取所有角色
     * @param array $data
     * @return array
     */
    public function allRoles(array $data): array;

    /**
     * 创建角色
     * @param array $data
     * @return array
     */
    public function roleCreate(array $data): array;

    /**
     * 角色修改
     * @param array $data
     * @return array
     */
    public function roleUpdate(array $data): array;

    /**
     * 角色删除
     * @param array $data
     * @return array
     */
    public function roleDelete(array $data): array;

    /**
     * 创建权限
     * @param array $data
     * @return array
     */
    public function permissionCreate(array $data): array;

    /**
     * 权限修改
     * @param array $data
     * @return array
     */
    public function permissionUpdate(array $data): array;

    /**
     * 权限删除
     * @param array $data
     * @return array
     */
    public function permissionDelete(array $data): array;

    /**
     * 获取角色所有权限
     * @param array $data
     * @return array
     */
    public function rolePermissions(array $data): array;

    /**
     * 把人授权到角色
     * @param array $data
     * @return array
     */
    public function roleModifyUsers(array $data): array;

    /**
     * 列出用户某个节点得所有权限
     * @param array $data
     * @return array
     */
    public function listSubLevelPermissions(array $data): array;
    /**
     * 把权限授权到角色
     * @param array $data
     * @return array
     */
    public function roleModifyPermissions(array $data): array;

    /**
     * 获取角色下所有用户
     * @param array $data
     * @return array
     */
    public function roleUsers(array $data): array;

    /**
     * 获取指定用户角色和权限
     * @param array $data
     * @return array
     */
    public function userRolePermissions(array $data): array;

    /**
     * 判断用户是否有角色
     * @param array $data
     * @return array
     */
    public function hasRole(array $data): array;

    /**
     * 判断用户是否有权限
     * @param array $data
     * @return array
     */
    public function isUserHasPermission(array $data): array;

    /**
     * 组织创建
     * @param array $data
     * @return array
     */
    public function organizationCreate(array $data): array;

    /**
     * 组织更新
     * @param array $data
     * @return array
     */
    public function organizationUpdate(array $data): array;

    /**
     * 组织删除
     * @param array $data
     * @return array
     */
    public function organizationDelete(array $data): array;

    /**
     * 获取用户加入哪些组织
     * @param array $data
     * @return array
     */
    public function userOrganizations(array $data): array;

    /**
     * 组织添加或者减少人员
     * @param array $data
     * @return array
     */
    public function organizationModifyUsers(array $data): array;

    /**
     * 职位创建
     * @param array $data
     * @return array
     */
    public function positionCreate(array $data): array;

    /**
     * 职位修改
     * @param array $data
     * @return array
     */
    public function positionUpdate(array $data): array;

    /**
     * 职位删除
     * @param array $data
     * @return array
     */
    public function positionDelete(array $data): array;

    /**
     * 获取用户有哪些职位
     * @param array $data
     * @return array
     */
    public function userPositions(array $data): array;

    /**
     * 职位添加或减少人员
     * @param array $data
     * @return array
     */
    public function positionModifyUsers(array $data): array;

    /**
     * 添加账号
     * @param array $data
     * @return array
     */
    public function userCreate(array $data): array;

    /**
     * 更新账号
     * @param array $data
     * @return array
     */
    public function userUpdate(array $data): array;

    /**
     * 账号删除
     * @param array $data
     * @return array
     */
    public function userDelete(array $data): array;

    /**
     * 账号登录
     * @param array $data
     * @return array
     */
    public function userLogin(array $data): array;

    /**
     * 获取账号信息
     * @param array $data
     * @return array
     */
    public function userInfo(array $data): array;

    /**
     * 验证密码
     * @param array $data
     * @return array
     */
    public function checkPassword(array $data): array;
}
